package com.vegetable.modules.service.finance;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vegetable.modules.entity.finance.po.ProjectProfitQueryPO;
import com.vegetable.modules.entity.finance.vo.ProjectProfitSummaryVO;
import com.vegetable.modules.entity.finance.vo.ExpenseDetailVO;
import com.vegetable.modules.entity.finance.vo.FinanceTrendVO;
import com.vegetable.modules.entity.finance.vo.ExpenseRatioVO;
import com.vegetable.modules.entity.finance.vo.CommoditySalesVO;
import com.vegetable.modules.entity.finance.vo.PackPurchaseVO;
import com.vegetable.modules.entity.finance.vo.CustomerSalesVO;
import com.vegetable.modules.entity.finance.vo.PackLossPageVO;
import com.vegetable.modules.entity.finance.vo.PackLossVO;
import com.vegetable.modules.entity.finance.vo.CommoditySalesPageVO;
import com.vegetable.modules.entity.finance.vo.PackPurchasePageVO;
import com.vegetable.modules.entity.finance.vo.CustomerSalesPageVO;

import java.util.List;

/**
 * 项目盈利情况统计服务接口
 */
public interface ProjectProfitService {

    /**
     * 获取项目总体盈利情况
     * 
     * @param po 查询参数
     * @return 项目盈利情况汇总数据
     */
    ProjectProfitSummaryVO getProjectProfitSummary(ProjectProfitQueryPO po);

    /**
     * 获取项目支出明细
     * 
     * @param po 查询参数
     * @return 支出明细分页数据
     */
    IPage<ExpenseDetailVO> getExpenseDetails(ProjectProfitQueryPO po);

    /**
     * 获取项目收支趋势
     * 
     * @param po 查询参数
     * @return 收支趋势数据
     */
    FinanceTrendVO getFinanceTrend(ProjectProfitQueryPO po);

    /**
     * 获取支出占比分析
     * 
     * @param po 查询参数
     * @return 各项支出占比数据
     */
    ExpenseRatioVO getExpenseRatio(ProjectProfitQueryPO po);
    
    /**
     * 按商品统计销售情况
     * 
     * @param po 查询参数
     * @return 商品销售统计分页列表及总统计
     */
    CommoditySalesPageVO getSalesByCommodityWithTotal(ProjectProfitQueryPO po);
    
    /**
     * 获取包装类采购统计
     * 
     * @param po 查询参数
     * @return 包装采购统计分页列表及总统计
     */
    PackPurchasePageVO getPackPurchaseDetailsWithTotal(ProjectProfitQueryPO po);
    
    /**
     * 按客户统计销售及回款数据
     * 
     * @param po 查询参数
     * @return 客户销售统计分页列表及总统计
     */
    CustomerSalesPageVO getSalesByCustomerWithTotal(ProjectProfitQueryPO po);
    
    /**
     * 获取加工订单损耗情况
     * 
     * @param po 查询参数
     * @return 加工订单损耗统计分页列表及总损耗统计
     */
    PackLossPageVO getPackLossDetails(ProjectProfitQueryPO po);
    
    // 保留原有的分页方法以保持向后兼容性
    /**
     * 按商品统计销售情况（仅分页数据）
     * 
     * @param po 查询参数
     * @return 商品销售统计分页列表
     */
    IPage<CommoditySalesVO> getSalesByCommodity(ProjectProfitQueryPO po);
    
    /**
     * 获取包装类采购统计（仅分页数据）
     * 
     * @param po 查询参数
     * @return 包装采购统计分页列表
     */
    IPage<PackPurchaseVO> getPackPurchaseDetails(ProjectProfitQueryPO po);
    
    /**
     * 按客户统计销售及回款数据（仅分页数据）
     * 
     * @param po 查询参数
     * @return 客户销售统计分页列表
     */
    IPage<CustomerSalesVO> getSalesByCustomer(ProjectProfitQueryPO po);
}